package main

import "fmt"

func main() {
	// 输出10句 "你好，尚硅谷"
	// golang中，有循环控制语句来处理循环的执行某段代码的方法->for循环
	// for循环快速入门I

	/* for i := 0; i < 10; i++ {
		fmt.Println("你好，尚硅谷", i)
	} */

	/* i := 0
	for ; i < 10; i++ {
		fmt.Println("你好，尚硅谷", i)
	}
	fmt.Println("i= ", i) */

	// for循环的第二种写法
	/* j := 0       // 循环变量初始化
	for j < 10 { // 循环条件
		fmt.Println("j= ", j)
		j++ // 循环变量迭代
	} */

	// for循环的第三种写法，通常需要配合break语句使用。
	/* k := 1
	for {
		if k <= 10 { // 这里也等价 for ; ; {}
			fmt.Println("k= ", k)
		} else {
			break // break就是跳出这个for循环
		}
		k++
	} */

	// 字符串遍历方式1-传统方式	不能含中文
	/* var str string = "hello,world!北京"
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c \n", str[i]) // 使用到下标	会出现乱码 类型不对
		fmt.Printf("%v \n", str[i]) // 使用到下标
	} */

	// 字符串遍历方式3-切片方式
	var str string = "hello,world!北京"
	// str = []rune(str) // 就是把 str 转成 []rune		会报类型错误
	str2 := []rune(str) // 就是把 str 转成 []rune
	for i := 0; i < len(str2); i++ {
		fmt.Printf("%v \n", str2[i]) // 使用到下标
	}

	// 字符串遍历方式2-for-range		相当于js的forEach	支持中文输出
	str = "abc~ok上海"
	for index, val := range str {
		fmt.Printf("index=%d, val=%c \n", index, val)
	}
}
